#ifndef OPEWIDGET_H
#define OPEWIDGET_H

#include <QWidget>
#include <QListWidget>
#include <QTextCursor>


#include "friend.h"
#include "book.h"
#include "msgadd.h"


#include <QStackedWidget>//每次只显示一个的堆栈窗口

class TcpClient;

class OpeWidget : public QWidget
{
    Q_OBJECT
public:
    explicit OpeWidget(QWidget *parent = nullptr);

    //单例模式, 产生静态的一个操作界面, 应用程序程序只产生这一个操作界面
    static OpeWidget& getInstance();//


    //从m_pTextEditTE控件的起始处插入日志输出
    void m_setText(QString str);

    //有消息从服务器发过来
    void haveMsgFromServer(const PDU *pdu);

    //有消息从服务器发过来, 同意的消息
    void haveMsgFromServer_agree(const PDU *pdu);
    //有消息从服务器发过来, 拒绝的消息
    void haveMsgFromServer_refuse(const PDU *pdu);



public slots:
    //Friend类发送来的信号signals_showOnlinePBslot, 处理客户端按下显示在线用户按钮
    void slot_Friend_signals_showOnlinePBslot(enum ENUM_PUSHBUTTON_TYPE e, QString text);

    //TcpClient类发来的信号
    void slot_TcpClient_signal_slot_sendToServerPBOnline();

    //MsgAdd类打算输出日志
    void slot_MsgAdd_signals_showOnlinePBslot(QString logStr);


    //把MsgAdd标签变为无色, 取消消息提醒
    void slot_cancleMsgAdd();


signals:


private:

    QTextCursor* m_pTextCursor;//光标, 用于从起始处显示操作变量, 配合QTextEdit* m_pTextEditTE;使用
    QTextEdit* m_pTextEditTE;//显示操作日志

    QListWidget* m_pListw;//列表
    QListWidgetItem* friend_listWidget_item;
    QListWidgetItem* book_listWidget_item;
    QListWidgetItem* msgadd_listWidget_item ;

    Friend *m_pFriend;//好友框
    Book *m_pBook;//图书框
    MsgAdd *m_pMsgAdd;//添加好友消息框

    QStackedWidget *m_pSW;//把好友框和图书框放到这个堆栈widget中, 它只显示一个在最上面

    QHBoxLayout *p_teHBL ;
    QHBoxLayout *pMain;
    QVBoxLayout *pAll;

};

#endif // OPEWIDGET_H
